importPackage(Packages.de.elo.ix.client);
//@include lib_Class.js
//@include lib_sol.common.RepoUtils.js
//@include lib_sol.common.SordUtils.js
//@include lib_sol.common.ix.FunctionBase.js
var logger = sol.create("sol.Logger", { scope: "sol.common.ix.functions.CheckDoc" });
/**
* Checks the extension of an document.
*
* If the element is folder it is assumend, that the folder is document container.
* In this case, the first element in the folder is checked for the file extension.
*
* # Example
*
* {
* "checks": { "hasExtension": ["tiff", "tif", "pdf", "jpg", "jpeg"] },
* "wfStatus": { "onSuccess": "TRUE", "onFailure": "FALSE" }
* }
*
* @author MW, ELO Digital Office GmbH
* @version 1.0
*
* @eloix
* @requires sol.common.RepoUtils
* @requires sol.common.SordUtils
* @requires sol.common.ix.FunctionBase
*
*/
sol.define("sol.common.ix.functions.CheckDoc", {
extend: "sol.common.ix.FunctionBase",
requiredConfig: ["wfDiagram", "checks"],
/**
* @cfg {de.elo.ix.client.wfDiagram} wfDiagram (required)
* The workflow which should be checked.
*/
/**
* @cfg {Object} checks
* Checks
*/
/**
* @cfg {String[]} checks.extensions
* Extensions
*/
/**
* @cfg {Object} wfStatus
*
* "wfStatus": { "onSuccess": "yaaay", "onFailure": "ohNooo" }
*
* - `onSuccess`: set as ELO_WF_STATUS after a successfull check
* - `onFailure`: set as ELO_WF_STATUS after a check failure
*/
/**
* @private
* @property {String} [DEFAULT_PASSED_STATUS="PASSED"] Default workflow status in case of a successful check
*/
DEFAULT_PASSED_STATUS: "PASSED",
/**
* @private
* @property {String} [DEFAULT_FAILED_STATUS="FAILED"] Default workflow status in case of a check failure
*/
DEFAULT_FAILED_STATUS: "FAILED",
initialize: function (config) {
var me = this;
me.$super("sol.common.ix.FunctionBase", "initialize", [config]);
},
/**
* Perform the checks.
*/
process: function () {
var me = this,
result, status;
me.sord = ixConnect.ix().checkoutSord(me.wfDiagram.objId, SordC.mbAllIndex, LockC.NO);
result = me.check();
if (result) {
status = (me.wfStatus && me.wfStatus.onSuccess) ? me.wfStatus.onSuccess : me.DEFAULT_PASSED_STATUS;
} else {
status = (me.wfStatus && me.wfStatus.onFailure) ? me.wfStatus.onFailure : me.DEFAULT_FAILED_STATUS;
}
sol.common.WfUtils.setWorkflowStatus(me.wfDiagram, status);
},
check: function () {
var me = this,
sord, isFolder, extension, result;
sord = ixConnect.ix().checkoutSord(me.wfDiagram.objId, SordC.mbAll, LockC.NO);
isFolder = sol.common.SordUtils.isFolder(sord);
if (isFolder) {
sord = me.getFirstChildDocument(sord);
}
if (!sord || !sord.docVersion || !sord.docVersion.ext) {
return false;
}
extension = (sord.docVersion.ext + "").toLowerCase();
if (!me.checks || !me.checks.hasExtension) {
return false;
}
me.checks.hasExtension = me.checks.hasExtension.map(function (ext) {
return ext.toLowerCase();
});
result = (me.checks.hasExtension.indexOf(extension) > 0);
return result;
},
getFirstChildDocument: function (sord) {
var sords, firstChildDocument;
sords = sol.common.RepoUtils.findChildren(sord.id, {
includeDocuments: true,
includeFolders: false
});
if (!sords || (sords.length < 1)) {
return null;
}
firstChildDocument = sords[0];
return firstChildDocument;
}
});
/**
* @member sol.common.ix.functions.CheckDoc
* @static
* @inheritdoc sol.common.ix.FunctionBase#onExitNode
*/
function onExitNode(clInfo, userId, wfDiagram, nodeId) {
var params, module;
logger.enter("onExitNode_CheckDoc", { flowId: wfDiagram.id, nodeId: nodeId });
params = sol.common.WfUtils.parseAndCheckParams(wfDiagram, nodeId);
params.wfDiagram = wfDiagram;
module = sol.create("sol.common.ix.functions.CheckDoc", params);
module.process();
logger.exit("onExitNode_CheckDoc");
}